package users;

import info.Conference;
import info.Manuscript;

import java.util.List;

/**
 * The Subprogram Chair class is modeled after the functions and
 * responsibilities that a Subprogram Chair will have.  The
 * Subprogram Chair is responsible for organizing their connections
 * with Reviewers; volunteers who are generally experts of the
 * field that the Subprogram Chair specializes in.  In addition,
 * the Subprogram Chair takes a look at the reviews that each
 * manuscript receives and makes a recommendation to the Program
 * Chair based on the reviews and his opinion.
 * @author Aaron Chen
 * @version skeleton
 */
public class SubprogramChair extends AbstractRole {

  /** The Program Chair that the Subprogram Chair responds to. */
  private ProgramChair my_program_chair;

  /** The categories of the conference that the Subprogram Chair
   * is assigned to specialize in. */
  private List<String> my_categories;

  /** The list of reviewers that are responsible to the Subprogram
   * Chair. */
  private List my_reviewers;

  /** The list of manuscripts that the Subprogram Chair is responsible
   * for reviewing. */
  private List my_manuscripts;


  /**
   * Constructs a new Subprogram Chair role.
   * @param the_conference The conference that this role belongs to.
   * @param the_program_chair The Program Chair that the Subprogram Chair
   * responds to.
   */
  public SubprogramChair(final Conference the_conference,
                            final ProgramChair the_program_chair) {
    super(the_conference);
    // TODO Auto-generated constructor stub
  }

  /**
   * Assigns a Reviewer role to a user that the Subprogram Chair trusts.
   * @param the_user The user to be assigned as a Reviewer.
   * @return true if the user was successfully assigned a Reviewer role;
   * false otherwise.
   */
  public boolean assignReviewerRole(final User the_user) {
    //TODO assignReviewerChairRole
    return false;
  }

  /**
   * Assigns a manuscript to a Reviewer for reviewing.  A Reviewer may
   * only have a limited number of manuscripts to review.
   * @param the_manuscript The manuscript to be assigned.
   * @param the_reviewer The Reviewer to receive the manuscript assignment.
   * @return true if the manuscript was assigned successfully to the
   * Reviewer; false otherwise.
   */
  public boolean assignManuscriptToReviewer(final Manuscript the_manuscript,
                                            final Reviewer the_reviewer) {
    //TODO assignManuscriptToReviewer
    return false;
  }

  public ProgramChair getProgramChair() {
    return my_program_chair;
  }
  public List<String> getCategories() {
    return my_categories;
  }
  public List getReviewers() {
    return my_reviewers;
  }
  public List getManuscripts() {
    return my_manuscripts;
  }

}
